class Solution {
public:
    int beautifulSubsets(vector<int>& nums, int k) {
        int n = nums.size();
        unordered_map<int,int> cnt;
        // sort(nums.begin(),nums.end());
        int ans = -1;
        auto dfs = [&](this auto&& dfs,int i) ->void{
            if(i == nums.size()){
                ans++;
                return;
            }
            dfs(i + 1);
            int x = nums[i];
            if (cnt[x - k] == 0 && cnt[x + k] == 0) { // 可以选
                cnt[x]++; // 选
                dfs(i + 1); // 讨论 nums[i+1] 选或不选
                cnt[x]--; // 撤销，恢复现场
            }
            return;
        };
  
        dfs(0);
        return ans;
    }
};